home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland Pascal with Objects 7.0 / TVDEMO.ZIP / TVEDIT.PAS < prev    next >
Pascal/Delphi Source File  |  1992-10-27  |  4KB  |  186 lines

  1. {************************************************}
  2. {                                                }
  3. {   Turbo Vision Editor Demo                     }
  4. {   Copyright (c) 1992 by Borland International  }
  5. {                                                }
  6. {************************************************}
  7.  
  8. program TVEdit;
  9.  
  10. {$M 8192,8192,655360}
  11. {$X+,S-}
  12.  
  13. { This program demonstrates the use of the Editors units.
  14.   See EDITORS.DOC in the \DOC directory.
  15. }
  16.  
  17. uses Dos, Objects, Drivers, Memory, Views, Menus, Dialogs,
  18.   StdDlg, MsgBox, App, Calc, Editors;
  19.  
  20. { If you get a FILE NOT FOUND error when compiling this program
  21.   from a DOS IDE, change to the \BP\EXAMPLES\DOS\TVDEMO directory
  22.   (use File|Change dir).
  23.  
  24.   This will enable the compiler to find all of the units used by
  25.   this program.
  26. }
  27.  
  28. const
  29.   HeapSize = 32 * (1024 div 16);
  30.  
  31. const
  32.   cmCalculator = 101;
  33.   cmShowClip   = 102;
  34.  
  35. type
  36.   PEditorApp = ^TEditorApp;
  37.   TEditorApp = object(TApplication)
  38.     constructor Init;
  39.     procedure HandleEvent(var Event: TEvent); virtual;
  40.     procedure InitMenuBar; virtual;
  41.     procedure InitStatusLine; virtual;
  42.     procedure OutOfMemory; virtual;
  43.   end;
  44.  
  45. var
  46.   EditorApp: TEditorApp;
  47.   ClipWindow: PEditWindow;
  48.  
  49. function OpenEditor(FileName: FNameStr; Visible: Boolean): PEditWindow;
  50. var
  51.   P: PWindow;
  52.   R: TRect;
  53. begin
  54.   DeskTop^.GetExtent(R);
  55.   P := New(PEditWindow, Init(R, FileName, wnNoNumber));
  56.   if not Visible then P^.Hide;
  57.   OpenEditor := PEditWindow(Application^.InsertWindow(P));
  58. end;
  59.  
  60. constructor TEditorApp.Init;
  61. var
  62.   H: Word;
  63.   R: TRect;
  64. begin
  65.   MaxHeapSize := HeapSize;
  66.   inherited Init;
  67.   DisableCommands([cmSave, cmSaveAs, cmCut, cmCopy, cmPaste, cmClear,
  68.     cmUndo, cmFind, cmReplace, cmSearchAgain]);
  69.   EditorDialog := StdEditorDialog;
  70.   ClipWindow := OpenEditor('', False);
  71.   if ClipWindow <> nil then
  72.   begin
  73.     Clipboard := ClipWindow^.Editor;
  74.     Clipboard^.CanUndo := False;
  75.   end;
  76. end;
  77.  
  78. procedure TEditorApp.HandleEvent(var Event: TEvent);
  79.  
  80. procedure FileOpen;
  81. var
  82.   FileName: FNameStr;
  83. begin
  84.   FileName := '*.*';
  85.   if ExecuteDialog(New(PFileDialog, Init('*.*', 'Open file',
  86.     '~N~ame', fdOpenButton, 100)), @FileName) <> cmCancel then
  87.     OpenEditor(FileName, True);
  88. end;
  89.  
  90. procedure FileNew;
  91. begin
  92.   OpenEditor('', True);
  93. end;
  94.  
  95. procedure ChangeDir;
  96. begin
  97.   ExecuteDialog(New(PChDirDialog, Init(cdNormal, 0)), nil);
  98. end;
  99.  
  100. procedure ShowClip;
  101. begin
  102.   ClipWindow^.Select;
  103.   ClipWindow^.Show;
  104. end;
  105.  
  106. procedure Calculator;
  107. begin
  108.   InsertWindow(New(PCalculator, Init));
  109. end;
  110.  
  111. begin
  112.   inherited HandleEvent(Event);
  113.   case Event.What of
  114.     evCommand:
  115.       case Event.Command of
  116.         cmOpen: FileOpen;
  117.         cmNew: FileNew;
  118.         cmChangeDir: ChangeDir;
  119.         cmCalculator: Calculator;
  120.         cmShowClip: ShowClip;
  121.       else
  122.         Exit;
  123.       end;
  124.   else
  125.     Exit;
  126.   end;
  127.   ClearEvent(Event);
  128. end;
  129.  
  130. procedure TEditorApp.InitMenuBar;
  131. var
  132.   R: TRect;
  133. begin
  134.   GetExtent(R);
  135.   R.B.Y := R.A.Y + 1;
  136.   MenuBar := New(PMenuBar, Init(R, NewMenu(
  137.     NewSubMenu('~F~ile', hcNoContext, NewMenu(
  138.       StdFileMenuItems(
  139.       nil)),
  140.     NewSubMenu('~E~dit', hcNoContext, NewMenu(
  141.       StdEditMenuItems(
  142.       nil)),
  143.     NewSubMenu('~S~earch', hcNoContext, NewMenu(
  144.       NewItem('~F~ind...', '', kbNoKey, cmFind, hcNoContext,
  145.       NewItem('~R~eplace...', '', kbNoKey, cmReplace, hcNoContext,
  146.       NewItem('~S~earch again', '', kbNoKey, cmSearchAgain, hcNoContext,
  147.       nil)))),
  148.     NewSubMenu('~W~indows', hcNoContext, NewMenu(
  149.       StdWindowMenuItems(
  150.       NewLine(
  151.       NewItem('Ca~l~culator', '', kbNoKey, cmCalculator, hcNoContext,
  152.       nil)))),
  153.     nil)))))));
  154. end;
  155.  
  156. procedure TEditorApp.InitStatusLine;
  157. var
  158.   R: TRect;
  159. begin
  160.   GetExtent(R);
  161.   R.A.Y := R.B.Y - 1;
  162.   New(StatusLine, Init(R,
  163.     NewStatusDef(0, $FFFF,
  164.       NewStatusKey('~F2~ Save', kbF2, cmSave,
  165.       NewStatusKey('~F3~ Open', kbF3, cmOpen,
  166.       NewStatusKey('~Alt-F3~ Close', kbAltF3, cmClose,
  167.       NewStatusKey('~F5~ Zoom', kbF5, cmZoom,
  168.       NewStatusKey('~F6~ Next', kbF6, cmNext,
  169.       NewStatusKey('~F10~ Menu', kbF10, cmMenu,
  170.       NewStatusKey('', kbCtrlF5, cmResize,
  171.       nil))))))),
  172.     nil)));
  173. end;
  174.  
  175. procedure TEditorApp.OutOfMemory;
  176. begin
  177.   MessageBox('Not enough memory for this operation.',
  178.     nil, mfError + mfOkButton);
  179. end;
  180.  
  181. begin
  182.   EditorApp.Init;
  183.   EditorApp.Run;
  184.   EditorApp.Done;
  185. end.
  186.